//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#pragma package(smart_init)
#pragma resource "*.dfm"

//---------------------------------------------------------------------------
#include "vSCopyLogiciel.h"
#pragma link "CComboBx"
#pragma link "CEdit"
//---------------------------------------------------------------------------
//                          Constructeur
//---------------------------------------------------------------------------
__fastcall TCopyLogiciel::TCopyLogiciel(const AnsiString &asLogNom,
                                        const int &nLogiciel,
                                        const bool &bMenu,
                                        TComponent* Owner)
    : TForm(Owner)
{
    try {
        dmWebHelp = new TdmWebHelp((TComponent*)0);
        if(bMenu){
            cbLogiciel->Visible = true;
            AjouterLog();
        }else {
            cbLogiciel->Visible = false;
            m_nLogiciel = nLogiciel;
            AnsiString asNomLogicielSource = asLogNom;

            cSource->Text = asNomLogicielSource;

            AnsiString asNomLogicielDest(EmptyStr);
            int i= 0;
            do {
                ++i;
                asNomLogicielDest = asNomLogicielSource + " (" + i + ")";
                if (asNomLogicielDest.Length() > 45){
                    MessageDlg("Attention, le nom du logiciel est trop long.\nVeuillez le changer le nom du logiciel.", mtWarning, TMsgDlgButtons() << mbOK, 0);
                    break;
                }
            } while(VerifNomLogiciel(asNomLogicielDest));
            cCible->Text = asNomLogicielDest;
        }
    }catch( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);}
}
//---------------------------------------------------------------------------
__fastcall TCopyLogiciel::~TCopyLogiciel()
{
    try {
        if(dmWebHelp) {delete dmWebHelp; dmWebHelp = NULL;}
    }catch( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);}
}
//A partir de la fenetre ParamLogiciel
//****************************************************************************//
//---------------------------------------------------------------------------
//               Vérifier l'existance du logiciel
//---------------------------------------------------------------------------
bool __fastcall TCopyLogiciel::VerifNomLogiciel(const AnsiString &asLogNom)
{
    bool bRetour = false;
    TZZMySqlQuery * MaRequete = NULL;
    try {

        MaRequete = new TZZMySqlQuery( (TComponent*)0);
        MaRequete->Database = dmWebHelp->dbWebHelp;

        //Insertion dans la table référence
        //---------------------------------
        MaRequete->Sql->Text = (AnsiString)"select log_nom from logiciels where log_nom="+QuotedStr(asLogNom);
        MaRequete->Open();
        MaRequete->First();

        if(!asRequete(0).IsEmpty())
            bRetour = true;

        MaRequete->Sql->Clear();
        MaRequete->Close();

    }catch ( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);
        bRetour = false;}
    if(MaRequete) {delete MaRequete; MaRequete = NULL;}
    return bRetour;
}
//---------------------------------------------------------------------------
//              INSERER DANS LA TABLE LOGICIEL
//---------------------------------------------------------------------------
void __fastcall TCopyLogiciel::InsererTableLogiciel()
{
    try {
        dmWebHelp->tLogiciels->Active = true;
        dmWebHelp->tLogiciels->Insert();
        astLogiciels(LOG_NOM) = cCible->Text;
        dmWebHelp->tLogiciels->Post();
        dmWebHelp->trWebHelp->Commit();
    }catch ( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);}
}
//---------------------------------------------------------------------------
//              Récupérer l id du dernier logiciel enregistrer
//---------------------------------------------------------------------------
int  __fastcall TCopyLogiciel::GetMaxIDLog( void )
{
    int GenId = 0;
    TZZMySqlQuery * MaRequete = NULL;
    try {

        MaRequete = new TZZMySqlQuery( (TComponent*)0);
        MaRequete->Database = dmWebHelp->dbWebHelp;

        //Insertion dans la table référence
        //---------------------------------
        MaRequete->Sql->Text = "select max(log_code) from logiciels";
        MaRequete->Open();
        MaRequete->First();

        GenId = nRequete(0);

        MaRequete->Sql->Clear();
        MaRequete->Close();

    }catch ( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);
        GenId = 0;}
    if(MaRequete) {delete MaRequete; MaRequete = NULL;}
    return GenId;
}
//---------------------------------------------------------------------------
//              Récupérer l id de la derniere version enregistrer
//---------------------------------------------------------------------------
int  __fastcall TCopyLogiciel::GetMaxIDVer( void )
{
    int GenId = 0;
    TZZMySqlQuery * MaRequete = NULL;
    try {

        MaRequete = new TZZMySqlQuery( (TComponent*)0);
        MaRequete->Database = dmWebHelp->dbWebHelp;

        //Insertion dans la table référence
        //---------------------------------
        MaRequete->Sql->Text = "select max(ver_code) from versions";
        MaRequete->Open();
        MaRequete->First();

        GenId = nRequete(0);

        MaRequete->Sql->Clear();
        MaRequete->Close();

    }catch ( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);
        GenId = 0;}
    if(MaRequete) {delete MaRequete; MaRequete = NULL;}
    return GenId;
}
//---------------------------------------------------------------------------
//              INSERER DANS LA TABLE VERSION
//---------------------------------------------------------------------------
void __fastcall TCopyLogiciel::InsererTableVersions(const int &nLogicielCible)
{
    TZZMySqlQuery * MaRequete = NULL;
    TStringList * lVerCodeCible = NULL;
    TStringList * lVerCodeSource = NULL;
    try {

        lVerCodeCible  = new TStringList();
        lVerCodeSource = new TStringList();

        MaRequete = new TZZMySqlQuery( (TComponent*)0);
        MaRequete->Database = dmWebHelp->dbWebHelp;

        //Insertion dans la table versions
        //--------------------------------
        MaRequete->Sql->Text = (AnsiString) "select ver_nom,"+      //0
                                            "ver_commentaire,"+     //1
                                            "ver_validite,"+        //2
                                            "ver_actif,"+           //3
                                            "ver_code "+            //4
                                            "from versions where log_code="+m_nLogiciel;
        MaRequete->Open();
        MaRequete->First();
        dmWebHelp->tVersions->Active = true;

        while(!MaRequete->Eof) {
            dmWebHelp->tVersions->Insert();
            ntVersions(LOG_CODE)          = nLogicielCible;
            astVersions(VER_NOM)          = asRequete(0);
            astVersions(VER_COMMENTAIRE)  = asRequete(1);
            astVersions(VER_VALIDITE)     = asRequete(2);
            astVersions(VER_ACTIF)        = asRequete(3);
            dmWebHelp->tVersions->Post();
            dmWebHelp->trWebHelp->Commit();
            
            lVerCodeSource->Add(nRequete(4));
            lVerCodeCible->Add(GetMaxIDVer());

            MaRequete->Next();
        }

        MaRequete->Sql->Clear();
        MaRequete->Close();


        for(int i=0; i<lVerCodeSource->Count; i++)
            InsererTableRefer(nLogicielCible,lVerCodeCible->Strings[i].ToInt() ,lVerCodeSource->Strings[i].ToInt());

    }catch( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);}
    if(MaRequete)       {delete MaRequete; MaRequete = NULL;}
    if(lVerCodeSource)  {delete lVerCodeSource; lVerCodeSource = NULL;}
    if(lVerCodeCible)   {delete lVerCodeCible; lVerCodeCible = NULL;}
}
//---------------------------------------------------------------------------
//          INSERER DANS LA TABLE REFERENCE
//---------------------------------------------------------------------------
void __fastcall TCopyLogiciel::InsererTableRefer(const int &nLogicielCible,
                                                 const int &nVerCodeCible,
                                                 const int &nVerCodeSource)
{
    TZZMySqlQuery * MaRequete = NULL;
    try {

        MaRequete = new TZZMySqlQuery( (TComponent*)0);
        MaRequete->Database = dmWebHelp->dbWebHelp;

        //Insertion dans la table référence
        //---------------------------------
        MaRequete->Sql->Text = (AnsiString) "select  ref_nom,"+          //0
                                                    "ref_sous_nom,"+     //1
                                                    "ref_commentaire,"+  //2
                                                    "ref_adresse,"+      //3
                                                    "ref_attente "+      //4
                                            "from refer where log_code="+m_nLogiciel+" and ver_code="+nVerCodeSource;
        MaRequete->Open();
        MaRequete->First();
        dmWebHelp->tRefer->Active = true;

        while(!MaRequete->Eof) {
            dmWebHelp->tRefer->Insert();
            ntRefer(VER_CODE)            = nVerCodeCible;
            ntRefer(LOG_CODE)            = nLogicielCible;
            astRefer(REF_NOM)            = asRequete(0);
            astRefer(REF_SOUS_NOM)       = asRequete(1);
            astRefer(REF_COMMENTAIRE)    = asRequete(2);
            astRefer(REF_ADRESSE)        = asRequete(3);
            ntRefer(REF_ATTENTE)         = nRequete(4);
            dmWebHelp->tRefer->Post();
            dmWebHelp->trWebHelp->Commit();
            MaRequete->Next();
        }

        MaRequete->Sql->Clear();
        MaRequete->Close();

    }catch( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);}
    if(MaRequete) {delete MaRequete; MaRequete = NULL;}
}
//---------------------------------------------------------------------------
//                      Valider la copie
//---------------------------------------------------------------------------
void __fastcall TCopyLogiciel::bbOkClick(TObject *Sender)
{
    CHistorique * Hist = NULL;
    try{
        if((!Trim(cCible->Text).IsEmpty()) && (cbLogiciel->ItemIndex != AUCUNE_SELECTION)) {
            if(!VerifNomLogiciel(cCible->Text)){
                InsererTableLogiciel();
                InsererTableVersions(GetMaxIDLog());

                Hist = new CHistorique();
                if( cbLogiciel->Visible == true )
                    Hist->AjouterOperation( Histo_DUPLI_LOG,cbLogiciel->Items->Strings[cbLogiciel->ItemIndex] );
                else
                    Hist->AjouterOperation( Histo_DUPLI_LOG,cSource->Text );

            }else {
                MessageDlg("Logiciel déjà existant !", mtWarning, TMsgDlgButtons() << mbOK, 0);
            }
        }else {
            MessageDlg("Veuillez remplir tous les champs", mtWarning, TMsgDlgButtons() << mbOK, 0);
            ModalResult = mrNone;
        }
    }catch ( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);}
    if(Hist) {delete Hist; Hist = NULL;}
}
//---------------------------------------------------------------------------
//A partir du menu
//---------------------------------------------------------------------------

//****************************************************************************//
void __fastcall TCopyLogiciel::AjouterLog( void )
{
    TZZMySqlQuery * MaRequete = NULL;
    try{

        MaRequete = new TZZMySqlQuery( (TComponent*)0);
        MaRequete->Database = dmWebHelp->dbWebHelp;

        //Insertion dans la table référence
        //---------------------------------
        MaRequete->Sql->Text = "select log_nom, log_code from logiciels";
        MaRequete->Open();
        MaRequete->First();

        while(!MaRequete->Eof) {
            cbLogiciel->Items->AddObject( asRequete(0), (TObject*)nRequete(1) );
            MaRequete->Next();
        }

        MaRequete->Sql->Clear();
        MaRequete->Close();

    }catch( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);}
    if(MaRequete) {delete MaRequete; MaRequete = NULL;}
}
//---------------------------------------------------------------------------
void __fastcall TCopyLogiciel::cbLogicielChange(TObject *Sender)
{
    try {
        int idx = cbLogiciel->ItemIndex;
        if( idx != AUCUNE_SELECTION ) {
            AnsiString asNomLogicielSource = cbLogiciel->Items->Strings[idx];
            AnsiString asNomLogicielDest(EmptyStr);
            int i= 0;
            do {
                ++i;
                asNomLogicielDest = asNomLogicielSource + " (" + i + ")";
                if (asNomLogicielDest.Length() > 45){
                    MessageDlg("Attention, le nom du logiciel est trop long.\nVeuillez le changer le nom du logiciel.", mtWarning, TMsgDlgButtons() << mbOK, 0);
                    break;
                }
            } while(VerifNomLogiciel(asNomLogicielDest));
            m_nLogiciel  = (int)cbLogiciel->Items->Objects[idx];
            cCible->Text = asNomLogicielDest;
        }
    }catch( Exception &e ) {
        EIC_DISPLAY_EXCEPTION(e);}
}
//---------------------------------------------------------------------------


